﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;

//namespace ZQNB.Entity.Rbac
//{

//    //问题：
//    //学科，年级，学段，角色等子站是否自定义？如果支持，如何实现和使用？
//    //全局设置中的指定和子站的指定不匹配的问题如何解决？

//    //自定义角色？ 站群和站的角色继承的矛盾？ 继承靠什么判断Id？Code？
//    //全局设置和站内自定义的矛盾！ 二者的Role都不统一，如何协调二者关系？

//    //模块在不同的站内使用，也内在需要统一的角色
//    //方案，全站一套角色模型


//    public interface ISiteService
//    {
//        Guid? GetSiteId(string site);
//    }

//    public interface ISiteObject
//    {
//        string Site { get; set; }
//    }
//    public class RequestContext
//    {
//        public string RequestSite { get; set; }
//        public UserContext User { get; set; }
//        public IList<RoleContext> Roles { get; set; }
//        public OpContext Op { get; set; }
//        public ObjContext Obj { get; set; }
//    }
//    public class UserContext
//    {
//        public string Site { get; set; }
//        public string LoginName { get; set; }
//    }
//    public class RoleContext
//    {
//        public string Site { get; set; }
//        public string Code { get; set; }
//        public string Name { get; set; }
//    }
//    public class OpContext
//    {
//        public string Pk { get; set; }
//        public OpType OpType { get; set; }
//    }
//    public class ObjContext
//    {
//        public string Pk { get; set; }
//        public ObjType ObjType { get; set; }
//    }

//    public abstract class RbacEntity : ISiteObject
//    {
//        public virtual Guid Id { get; set; }
//        public virtual string Site { get; set; }
//    }

//    public class Role : RbacEntity
//    {
//        public string Code { get; set; }
//        public string Name { get; set; }
//    }

//    public class User : RbacEntity
//    {
//        public string LoginName { get; set; }
//    }

//    public enum OpType
//    {
//        SubjectOp = 0,
//        ObjectOp = 1
//    }

//    public class Op : RbacEntity
//    {
//        public string Pk { get; set; }
//        public OpType OpType { get; set; }

//    }

//    public enum ObjType
//    {
//        Resource = 0
//        //    ,
//        //Live =1,
//        //User = 2
//    }

//    public class Obj : RbacEntity
//    {
//        public string Pk { get; set; }
//        public ObjType ObjType { get; set; }
//    }

//    public class RoleRule
//    {
//        public Role Role { get; set; }
//        public Op Op { get; set; }
//        public Obj Obj { get; set; }
//    }

//    public class UserRule
//    {
//        public User User { get; set; }
//        public Op Op { get; set; }
//        public Obj Obj { get; set; }
//    }


//    //public enum RuleType
//    //{
//    //    Allow,
//    //    Deny
//    //}

//    //public interface IUserRuleService
//    //{
//    //    bool CheckUserRule(RequestContext requestContext, UserRule userRule);
//    //    bool CheckUserRules(IList<UserRule> userRules);
//    //}

//    public interface IRuleService
//    {
//        IList<UserRule> GetUserRules(string userLoginName);
//        IList<RoleRule> GetRoleRules(string site, string roleCode);

//        IList<UserRule> GetUserRulesForObj(string objPk);
//        IList<RoleRule> GetRoleRulesForObj(string objPk);

//        //bool CheckRules(RequestContext requestContext);

//        //bool ValidateUserRule(UserRule userRule);
//        //bool ValidateUserRules(IList<UserRule> userRules);

//        //bool ValidateRoleRule(RoleRule roleRule);
//        //bool ValidateRoleRules(IList<RoleRule> roleRules);
//    }


//    public interface IRbacService
//    {
//        /// <summary>
//        /// 查找站点的角色
//        /// </summary>
//        /// <param name="site">site为null或者"", 返回全部；否则返回某个站点的角色</param>
//        /// <param name="includeGlobal">是否包含全局角色，默认包含</param>
//        /// <returns></returns>
//        IList<Role> GetSiteRoles(string site, bool includeGlobal = true);
//    }



//    public class RbacContext
//    {
//        public string Site { get; set; }
//        public string LoginName { get; set; }
//        public IList<string> Role { get; set; }
//    }




//}
